<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //深拷贝
        (function () {
            let obj = {
                a: 10,
                b: [10, 20],
                c: {
                    x: 10
                },
                d: /^d+$/
            }
            let obj1 = JSON.parse(JSON.stringify(obj)) //第一种  弊端 对应Key 是函数 日期 正则 会有丢失的情况

            //第二种封装
            function deep(obj) {
                if (obj === null) return null
                if (typeof obj !== 'object') return obj; //如果不是object直接返回
                if (obj instanceof RegExp) {
                    return new RegExp(obj) //如果是正则
                }
                if (obj instanceof Date) {
                    return new Date(obj) //如果是日期
                }
                if (obj instanceof Function) {
                    return new Function(obj) //如果是函数
                }
                //        let newObj={}
                //        let newObj=new Object
                let newObj = new obj.constructor  //既能克隆object 也能克隆实例
                for (let key in obj) {
                    if (obj.hasOwnProperty(key)) {
                        newObj[key] = deep(obj[key])
                    }
                }
                return newObj
            }
            let obj5 = deep(obj)
        })()

    </script>
</body>

</html>